/**
 * 订单明细模型
 * 用于定义订单明细表的结构以及相关操作
 * 
 * 数据库表定义（对应 flower_db_ddl_init.sql 中的 order_items 表）：
 * - id: INT UNSIGNED AUTO_INCREMENT COMMENT '主键'
 * - order_id: INT UNSIGNED NOT NULL COMMENT '订单id' (外键 → orders.id)
 * - goods_id: INT UNSIGNED NOT NULL COMMENT '商品id' (外键 → goods.id)
 * - quantity: INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '数量'
 * - price: DECIMAL(10,2) NOT NULL COMMENT '成交价格'
 * - blessing: VARCHAR(255) COMMENT '祝福语'
 * - created_at: DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3)
 * - updated_at: DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3)
 * 
 * 索引定义：
 * - PRIMARY KEY (id)
 * - KEY idx_order_items_order_id (order_id)
 * - KEY idx_order_items_goods_id (goods_id)
 * 
 * 外键约束：
 * - CONSTRAINT fk_order_items_orders_order_id FOREIGN KEY (order_id) REFERENCES orders(id)
 * - CONSTRAINT fk_order_items_goods_goods_id FOREIGN KEY (goods_id) REFERENCES goods(id)
 */
const { DataTypes } = require('sequelize');
const { sequelize } = require('../config/database');

const OrderItem = sequelize.define('OrderItem', {
  // 主键ID，自动递增
  id: {
    type: DataTypes.INTEGER.UNSIGNED,
    primaryKey: true,
    autoIncrement: true,
    field: 'id',
    comment: '主键'
  },
  // 订单ID，不能为空
  orderId: {
    type: DataTypes.INTEGER.UNSIGNED,
    allowNull: false,
    field: 'order_id',
    comment: '订单id'
  },
  // 商品ID，不能为空
  goodsId: {
    type: DataTypes.INTEGER.UNSIGNED,
    allowNull: false,
    field: 'goods_id',
    comment: '商品id'
  },
  // 数量，不能为空，默认为1
  quantity: {
    type: DataTypes.INTEGER.UNSIGNED,
    allowNull: false,
    defaultValue: 1,
    field: 'quantity',
    comment: '数量'
  },
  // 成交价格，不能为空
  price: {
    type: DataTypes.DECIMAL(10, 2),
    allowNull: false,
    field: 'price',
    comment: '成交价格'
  },
  // 祝福语，可为空
  blessing: {
    type: DataTypes.STRING(255),
    allowNull: true,
    field: 'blessing',
    comment: '祝福语'
  }
}, {
  // 指定数据库中的表名
  tableName: 'order_items',
  // 启用时间戳功能，自动管理创建时间和更新时间
  timestamps: true,
  // 自定义创建时间字段名，对应数据库中的 created_at 字段
  createdAt: 'created_at',
  // 自定义更新时间字段名，对应数据库中的 updated_at 字段
  updatedAt: 'updated_at',
  // 定义表的索引（与数据库DDL完全一致）
  indexes: [
    // 为订单ID建立普通索引
    { name: 'idx_order_items_order_id', fields: ['orderId'] },
    // 为商品ID建立普通索引
    { name: 'idx_order_items_goods_id', fields: ['goodsId'] }
  ]
});

// 添加实例方法以确保字段正确序列化
OrderItem.prototype.toJSON = function() {
  const values = Object.assign({}, this.get());
  // 移除时间字段
  delete values.created_at;
  delete values.updated_at;
  return values;
};

module.exports = OrderItem;